Skip to content

feat(ramps-controller): add unified getOrder to RampsService#7934

Merged
AxelGes merged 17 commits intomainfrom
feat/ramps-unified-getorder
Feb 19, 2026
Merged

feat(ramps-controller): add unified getOrder to RampsService#7934
AxelGes merged 17 commits intomainfrom
feat/ramps-unified-getorder

Conversation

@amitabh94
Copy link
Contributor

@amitabh94 amitabh94 commented Feb 13, 2026

Explanation

Add a getOrder method to RampsService that calls the V2 unified order endpoint (GET /v2/providers/:providerCode/orders/:orderCode). This endpoint returns a normalized RampsOrder (DepositOrder shape) for all provider types, enabling mobile to use a single order processor instead of separate aggregator and deposit processors.

This is the core-side prerequisite for unifying order processing in metamask-mobile and eventually removing both @consensys/on-ramp-sdk and @consensys/native-ramps-sdk for order polling.

Changes

  • RampsService.ts: Add RampsOrder type and related types (RampsOrderStatus, RampsOrderNetwork, RampsOrderCryptoCurrency, RampsOrderPaymentMethod). Add getOrder(providerCode, orderCode, wallet) method.
  • RampsService-method-action-types.ts: Add RampsServiceGetOrderAction type.
  • RampsController.ts: Add getOrder wrapper method. Wire RampsService:getOrder into allowed actions.
  • index.ts: Export all new types.

References

Simulator.Screen.Recording.-.iPhone.16.Pro.-.2026-02-19.at.18.54.40.mov

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've highlighted breaking changes using the "BREAKING" category above as appropriate
  • I've prepared a draft changelog entry if needed

Made with Cursor


Note

Medium Risk
Introduces new network-facing endpoints and a new exported order type surface area; bugs could affect order polling/parsing and downstream consumers, though changes are additive and covered by tests.

Overview
Adds V2 unified order polling by introducing RampsService.getOrder() (GET /v2/providers/:providerCode/orders/:orderCode) and RampsService.getOrderFromCallback() (callback parse endpoint + follow-up order fetch), and wiring both through RampsController and the messenger action types.

Exports a new normalized RampsOrder model (plus currency/payment/status subtypes and RampsOrderStatus) from the package, updates tests to cover the new endpoints and error cases, and documents the change in the changelog (plus minor Transak test retry tweaks).

Written by Cursor Bugbot for commit 8a5acbf. This will update automatically on new commits. Configure here.

amitabh94 and others added 4 commits February 13, 2026 11:24
Add a getOrder method to RampsService that calls the V2 unified order
endpoint (GET /v2/providers/:providerCode/orders/:orderCode). This
endpoint returns a normalized RampsOrder (DepositOrder shape) for all
provider types, enabling mobile to use a single order processor instead
of separate aggregator and deposit processors.

Changes:
- Add RampsOrder type and related types (RampsOrderStatus, etc.)
- Add getOrder method to RampsService
- Add RampsServiceGetOrderAction type
- Wire getOrder into RampsController as a passthrough method
- Export new types from index.ts

Co-authored-by: Cursor <cursoragent@cursor.com>
- Add getOrderFromCallback method to extract orders from provider callback URLs
  - Sends callback URL to V2 backend for provider-specific parsing
  - Backend extracts order ID using provider logic
  - Returns full RampsOrder (same pattern as aggregator SDK)
- Rename getWidgetUrl to getBuyWidget to return full BuyWidget object
  - Returns url, browser type, and orderId (for custom order tracking)
  - Mobile needs orderId for pre-order tracking like aggregator flow
- Wire new action through messenger and export types

This enables the V2 unified checkout to handle provider callbacks the same way
the aggregator SDK does, with server-side URL parsing instead of client-side guessing.
The V2 API embeds the widget information directly in quote responses (url,
browser type, orderId) instead of requiring a separate getBuyWidgetUrl call.
Add buyWidget field to Quote type to match the actual API response.
…ider types

The V2 API now returns full objects for the provider and fiatCurrency fields
on orders instead of path strings. Add typed shapes for both and update
RampsOrder accordingly so consumers can access name, links, symbol, decimals,
and denomSymbol directly without parsing.

Also fix getOrderFromCallback to extract just the order code from the full
resource path returned by the callback API, preventing a doubled URL in
the subsequent getOrder call.
@AxelGes
Copy link
Contributor

AxelGes commented Feb 19, 2026

@metamaskbot publish-preview

@AxelGes
Copy link
Contributor

AxelGes commented Feb 19, 2026

@metamaskbot publish-preview

@AxelGes
Copy link
Contributor

AxelGes commented Feb 19, 2026

@metamaskbot publish-preview

@AxelGes AxelGes marked this pull request as ready for review February 19, 2026 20:59
@AxelGes AxelGes requested review from a team as code owners February 19, 2026 20:59
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-a891ec3b5",
  "@metamask-previews/accounts-controller": "36.0.1-preview-a891ec3b5",
  "@metamask-previews/address-book-controller": "7.0.1-preview-a891ec3b5",
  "@metamask-previews/ai-controllers": "0.1.0-preview-a891ec3b5",
  "@metamask-previews/analytics-controller": "1.0.0-preview-a891ec3b5",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-a891ec3b5",
  "@metamask-previews/announcement-controller": "8.0.0-preview-a891ec3b5",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-a891ec3b5",
  "@metamask-previews/approval-controller": "8.0.0-preview-a891ec3b5",
  "@metamask-previews/assets-controller": "2.0.2-preview-a891ec3b5",
  "@metamask-previews/assets-controllers": "100.0.1-preview-a891ec3b5",
  "@metamask-previews/base-controller": "9.0.0-preview-a891ec3b5",
  "@metamask-previews/bridge-controller": "67.1.1-preview-a891ec3b5",
  "@metamask-previews/bridge-status-controller": "67.0.1-preview-a891ec3b5",
  "@metamask-previews/build-utils": "3.0.4-preview-a891ec3b5",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-a891ec3b5",
  "@metamask-previews/claims-controller": "0.4.2-preview-a891ec3b5",
  "@metamask-previews/client-controller": "1.0.0-preview-a891ec3b5",
  "@metamask-previews/compliance-controller": "0.0.0-preview-a891ec3b5",
  "@metamask-previews/composable-controller": "12.0.0-preview-a891ec3b5",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-a891ec3b5",
  "@metamask-previews/controller-utils": "11.19.0-preview-a891ec3b5",
  "@metamask-previews/core-backend": "6.0.0-preview-a891ec3b5",
  "@metamask-previews/delegation-controller": "2.0.1-preview-a891ec3b5",
  "@metamask-previews/earn-controller": "11.1.1-preview-a891ec3b5",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-a891ec3b5",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-a891ec3b5",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-a891ec3b5",
  "@metamask-previews/ens-controller": "19.0.3-preview-a891ec3b5",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-a891ec3b5",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-a891ec3b5",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-a891ec3b5",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-a891ec3b5",
  "@metamask-previews/foundryup": "1.0.1-preview-a891ec3b5",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-a891ec3b5",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-a891ec3b5",
  "@metamask-previews/json-rpc-engine": "10.2.2-preview-a891ec3b5",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-a891ec3b5",
  "@metamask-previews/keyring-controller": "25.1.0-preview-a891ec3b5",
  "@metamask-previews/logging-controller": "7.0.1-preview-a891ec3b5",
  "@metamask-previews/message-manager": "14.1.0-preview-a891ec3b5",
  "@metamask-previews/messenger": "0.3.0-preview-a891ec3b5",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-a891ec3b5",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-a891ec3b5",
  "@metamask-previews/multichain-network-controller": "3.0.4-preview-a891ec3b5",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-a891ec3b5",
  "@metamask-previews/name-controller": "9.0.0-preview-a891ec3b5",
  "@metamask-previews/network-controller": "30.0.0-preview-a891ec3b5",
  "@metamask-previews/network-enablement-controller": "4.1.2-preview-a891ec3b5",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-a891ec3b5",
  "@metamask-previews/permission-controller": "12.2.0-preview-a891ec3b5",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-a891ec3b5",
  "@metamask-previews/perps-controller": "0.0.0-preview-a891ec3b5",
  "@metamask-previews/phishing-controller": "16.3.0-preview-a891ec3b5",
  "@metamask-previews/polling-controller": "16.0.3-preview-a891ec3b5",
  "@metamask-previews/preferences-controller": "22.1.0-preview-a891ec3b5",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-a891ec3b5",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-a891ec3b5",
  "@metamask-previews/ramps-controller": "8.1.0-preview-a891ec3b5",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-a891ec3b5",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-a891ec3b5",
  "@metamask-previews/sample-controllers": "4.0.3-preview-a891ec3b5",
  "@metamask-previews/seedless-onboarding-controller": "8.0.0-preview-a891ec3b5",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-a891ec3b5",
  "@metamask-previews/shield-controller": "5.0.1-preview-a891ec3b5",
  "@metamask-previews/signature-controller": "39.0.4-preview-a891ec3b5",
  "@metamask-previews/storage-service": "1.0.0-preview-a891ec3b5",
  "@metamask-previews/subscription-controller": "6.0.0-preview-a891ec3b5",
  "@metamask-previews/transaction-controller": "62.17.1-preview-a891ec3b5",
  "@metamask-previews/transaction-pay-controller": "15.1.2-preview-a891ec3b5",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-a891ec3b5"
}

@AxelGes
Copy link
Contributor

AxelGes commented Feb 19, 2026

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-8a5acbf75",
  "@metamask-previews/accounts-controller": "36.0.1-preview-8a5acbf75",
  "@metamask-previews/address-book-controller": "7.0.1-preview-8a5acbf75",
  "@metamask-previews/ai-controllers": "0.1.0-preview-8a5acbf75",
  "@metamask-previews/analytics-controller": "1.0.0-preview-8a5acbf75",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-8a5acbf75",
  "@metamask-previews/announcement-controller": "8.0.0-preview-8a5acbf75",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-8a5acbf75",
  "@metamask-previews/approval-controller": "8.0.0-preview-8a5acbf75",
  "@metamask-previews/assets-controller": "2.0.2-preview-8a5acbf75",
  "@metamask-previews/assets-controllers": "100.0.1-preview-8a5acbf75",
  "@metamask-previews/base-controller": "9.0.0-preview-8a5acbf75",
  "@metamask-previews/bridge-controller": "67.1.1-preview-8a5acbf75",
  "@metamask-previews/bridge-status-controller": "67.0.1-preview-8a5acbf75",
  "@metamask-previews/build-utils": "3.0.4-preview-8a5acbf75",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-8a5acbf75",
  "@metamask-previews/claims-controller": "0.4.2-preview-8a5acbf75",
  "@metamask-previews/client-controller": "1.0.0-preview-8a5acbf75",
  "@metamask-previews/compliance-controller": "0.0.0-preview-8a5acbf75",
  "@metamask-previews/composable-controller": "12.0.0-preview-8a5acbf75",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-8a5acbf75",
  "@metamask-previews/controller-utils": "11.19.0-preview-8a5acbf75",
  "@metamask-previews/core-backend": "6.0.0-preview-8a5acbf75",
  "@metamask-previews/delegation-controller": "2.0.1-preview-8a5acbf75",
  "@metamask-previews/earn-controller": "11.1.1-preview-8a5acbf75",
  "@metamask-previews/eip-5792-middleware": "2.1.0-preview-8a5acbf75",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-8a5acbf75",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-8a5acbf75",
  "@metamask-previews/ens-controller": "19.0.3-preview-8a5acbf75",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-8a5acbf75",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-8a5acbf75",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-8a5acbf75",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-8a5acbf75",
  "@metamask-previews/foundryup": "1.0.1-preview-8a5acbf75",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-8a5acbf75",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-8a5acbf75",
  "@metamask-previews/json-rpc-engine": "10.2.2-preview-8a5acbf75",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-8a5acbf75",
  "@metamask-previews/keyring-controller": "25.1.0-preview-8a5acbf75",
  "@metamask-previews/logging-controller": "7.0.1-preview-8a5acbf75",
  "@metamask-previews/message-manager": "14.1.0-preview-8a5acbf75",
  "@metamask-previews/messenger": "0.3.0-preview-8a5acbf75",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-8a5acbf75",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-8a5acbf75",
  "@metamask-previews/multichain-network-controller": "3.0.4-preview-8a5acbf75",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-8a5acbf75",
  "@metamask-previews/name-controller": "9.0.0-preview-8a5acbf75",
  "@metamask-previews/network-controller": "30.0.0-preview-8a5acbf75",
  "@metamask-previews/network-enablement-controller": "4.1.2-preview-8a5acbf75",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-8a5acbf75",
  "@metamask-previews/permission-controller": "12.2.0-preview-8a5acbf75",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-8a5acbf75",
  "@metamask-previews/perps-controller": "0.0.0-preview-8a5acbf75",
  "@metamask-previews/phishing-controller": "16.3.0-preview-8a5acbf75",
  "@metamask-previews/polling-controller": "16.0.3-preview-8a5acbf75",
  "@metamask-previews/preferences-controller": "22.1.0-preview-8a5acbf75",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-8a5acbf75",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-8a5acbf75",
  "@metamask-previews/ramps-controller": "8.1.0-preview-8a5acbf75",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-8a5acbf75",
  "@metamask-previews/remote-feature-flag-controller": "4.0.0-preview-8a5acbf75",
  "@metamask-previews/sample-controllers": "4.0.3-preview-8a5acbf75",
  "@metamask-previews/seedless-onboarding-controller": "8.0.0-preview-8a5acbf75",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-8a5acbf75",
  "@metamask-previews/shield-controller": "5.0.1-preview-8a5acbf75",
  "@metamask-previews/signature-controller": "39.0.4-preview-8a5acbf75",
  "@metamask-previews/storage-service": "1.0.0-preview-8a5acbf75",
  "@metamask-previews/subscription-controller": "6.0.0-preview-8a5acbf75",
  "@metamask-previews/transaction-controller": "62.17.1-preview-8a5acbf75",
  "@metamask-previews/transaction-pay-controller": "15.1.2-preview-8a5acbf75",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-8a5acbf75"
}

@AxelGes AxelGes added this pull request to the merge queue Feb 19, 2026
Merged via the queue into main with commit f5faa52 Feb 19, 2026
310 checks passed
@AxelGes AxelGes deleted the feat/ramps-unified-getorder branch February 19, 2026 22:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

Comments